package com.betterjr.modules.flow.handler;

import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/** 
 * @ClassName: IBytterHandler 
 * @Description:  args是节点间数据的传递    ,可存可取
 * @author licz
 * @date 2017年11月16日 下午5:05:24 
 *  
 */
public interface IBytterHandler {
    final Logger logger = LoggerFactory.getLogger(IBytterHandler.class);
    String RESULT_GOON = "goon";
    String RESULT_GOOUT = "goout";
    String RESULT_PASS = "pass";
    String RESULT_REJECT = "reject";
    String BUSINESS_DATA = "businessData";// 存放数据时作为key,运行时数据
    String NEXT_NODE = "nextNode";// 下一节点名称

    /**
     * 执行之前（一般用作校验,此方法每次都会执行）   
     *  返回值范围： 
     *  null:如无需实现方法，直接返回null
     *  IBytterHandler.RESULT_GOON ：校验通过，继续执行
     *  IBytterHandler.RESULT_GOOUT：校验失败，退出执行
     *  IBytterHandler.RESULT_PASS：   校验通过，并指定继续执行 pass方法 
     *  IBytterHandler.RESULT_REJECT：校验通过，并指定继续执行 reject方法 
     *  自己指定执行下一步执行的方法名称 ：例如：pass, reject,doxxMethod
     */
    String before(Map<String, Object> args);

    /**
     * 保存数据（回传args，自行put数据 或者用BUSINESS_DATA）
     */
    Map<String, Object> save(Map<String, Object> args);

    /**
     *  处理通过--------- 默认返回null，下一节点按配置走
     *  1.指定下一节点    （回传args，设置NEXT_NODE的值）
     *  2.保存运行时数据（回传args，自行put数据 或者用BUSINESS_DATA）
     */
    Map<String, Object> pass(Map<String, Object> args);

    /**
     *  处理驳回--------- 默认返回null，下一节点按配置走
     *  1.指定下一节点    （回传args，设置NEXT_NODE的值）
     *  2.保存运行时数据（回传args，自行put数据 或者用BUSINESS_DATA）
     */
    Map<String, Object> reject(Map<String, Object> args);

    /**
     *  处理执行--------- 默认返回null，下一节点按配置走
     *  1.指定下一节点    （回传args，设置NEXT_NODE的值）
     *  2.保存运行时数据（回传args，自行put数据 或者用BUSINESS_DATA）
     */
    Map<String, Object> exec(Map<String, Object> args);

    /**
     * 详情数据-节点详情数据展示，默认返回null
     */
    Map<String, Object> getInfoDatas(Map<String, Object> args);
}
